/*
 * Term.h
 *
 *  Created on: Nov 26, 2012
 *      Author: m
 */

#ifndef TERM_H_
#define TERM_H_

#include <string>

namespace physical
{

/**
 * Término de una frase
 */
class Term
{
public:

    /**
     * Constructor por defecto
     *
     * Crea un término vacio
     */
    Term();

    /**
     * Constructor por valor
     *
     * Crea un término con el valor
     *  indicado por parámetro
     */
    Term( const std::string value );

    /**
     * Constructor por copia
     */
    Term( const Term& other );

    /**
     * Destructor
     */
    virtual ~Term();

    /**
     * Devuelve el término
     */
    const std::string& getTerm() const;

    /**
     * Setea un nuevo término
     *
     * @param term nuevo término a setear
     */
    void setTerm( const std::string& term );

    /**
     * Operador de asignación
     *
     * @param rhs
     * @return
     */
    Term& operator =( const Term& rhs );

    /**
     * Operador de comparación por igualdad
     *
     * @param other el término con el que se compara
     * @return true si es igual, false en caso contrario
     */
    bool operator ==( const Term& other ) const;

    /**
     * Operador de comparación por desigualdad
     *
     * @param other el término con el que se compara
     * @return true si no es igual, false en caso contrario
     */
    bool operator !=( const Term& other ) const;

protected:
    std::string m_term;
};

} /* namespace physical */
#endif /* TERM_H_ */
